/*
 * Contexto.h
 *
 *  Created on: 03/06/2010
 *      Author: sebastian
 */

#ifndef CONTEXTO_H_
#define CONTEXTO_H_

#include "ConstantesCompresor.h"

using namespace std;

class Contexto{

private:

	string nombre;

	unsigned frecuenciaTotal;

	unsigned cantidadEscapes;

	unsigned cantidadEOF;

	unsigned cantidadDeCaracteres;

	TTablaFreq* tabla;

public:

	//crea un nuevo contexto a partir de datos persistidos
	Contexto(char* data, string nombre);

	//pasa el contexto a bytes para ser guardado
	char* contextoABytes(int * tamanioData);

	//crea un nuevo contexto vacio, con el esc con frecuencia 1
	Contexto(string nombre);

	virtual ~Contexto();

	string getNombre();

	TTablaFreq *getTabla();

	//agrega uno a la frecuencia del caracter c
	void actualizar(TLetraExt caracter);

	//agrega uno a la frecuencia del esc
	void actualizarEsc();

	//agrega uno a la frecuencia del EOF
	void actualizarEOF();

	//setea un valor de EOF salidos
	void setEOF(unsigned cantidad);

	unsigned getCantidadDeEOF();

	unsigned getCantidadDeEscapes();

	//busca un caracter en la tabla
	map<TLetra,unsigned>::iterator* buscarCaracter(TLetra c);

	unsigned getCantidadDeCaracteres();

	unsigned getFrecuenciaTotal();

	//agrega un caracter a la tabla con su frecuencia
	void agregarCaracter(pair<TLetra,unsigned> par);

	//setea un valor de escapes salidos
	void setEsc(unsigned cantidad);

	//devuelve el carac si existe o NULL si no
	TLetraExt* devolverCaracter(TLetraExt caracter);
};


#endif /* CONTEXTO_H_ */
